package com.ruoyi.files.service.impl;

import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.List;
import java.util.Date;

import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.FileConvertor;
import com.ruoyi.common.utils.FileHash;
import com.ruoyi.common.utils.file.FileUploadUtils;
import com.ruoyi.files.mapper.SysFilesManageMapper;
import com.ruoyi.files.service.ISysFilesManageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.files.domain.SysFileManage;
import org.springframework.web.multipart.MultipartFile;

/**
 * 文件管理Service业务层处理
 * 
 * @author ruoyi
 * @date 2025-07-08
 */
@Service
public class SysFilesManageServiceImpl implements ISysFilesManageService
{
    @Autowired
    private SysFilesManageMapper filesManageMapper;

    @Override
    public SysFileManage saveFile(MultipartFile file) throws IOException, NoSuchAlgorithmException {
        System.out.println("empty");
        // 1. 校验文件
        if (file.isEmpty()) {
            throw new ServiceException("上传文件不能为空");
        }

        System.out.println("save");
        // 2. 保存文件到存储系统
        String storagePath = FileUploadUtils.upload(file);

        System.out.println("sql");
        // 3. 保存文件信息到数据库

        SysFileManage sysFileManage = new SysFileManage();
        sysFileManage.setFileId(FileHash.getHash(FileConvertor.convert(file), "SHA-256"));
        sysFileManage.setFileName(file.getOriginalFilename());
        sysFileManage.setMimeType(file.getContentType());
        sysFileManage.setStoragePath(storagePath);
//        sysFileManage.setFileType(FileUtils.getFileType(file.getOriginalFilename()));
        sysFileManage.setUploadDate(new Date());

        System.out.println("ins");
        System.out.println(sysFileManage);
        filesManageMapper.insertFilesManage(sysFileManage);

        System.out.println("return");
        return sysFileManage;
    }

    /**
     * 查询文件管理
     * 
     * @param fileId 文件管理主键
     * @return 文件管理
     */
    @Override
    public SysFileManage selectFilesManageByFileId(String fileId)
    {
        return filesManageMapper.selectFilesManageByFileId(fileId);
    }

    /**
     * 查询文件管理列表
     * 
     * @param sysFileManage 文件管理
     * @return 文件管理
     */
    @Override
    public List<SysFileManage> selectFilesManageList(SysFileManage sysFileManage)
    {
        return filesManageMapper.selectFilesManageList(sysFileManage);
    }

    /**
     * 新增文件管理
     * 
     * @param sysFileManage 文件管理
     * @return 结果
     */
    @Override
    public int insertFilesManage(SysFileManage sysFileManage)
    {
        return filesManageMapper.insertFilesManage(sysFileManage);
    }

    /**
     * 修改文件管理
     * 
     * @param sysFileManage 文件管理
     * @return 结果
     */
    @Override
    public int updateFilesManage(SysFileManage sysFileManage)
    {
        return filesManageMapper.updateFilesManage(sysFileManage);
    }

    /**
     * 批量删除文件管理
     * 
     * @param fileIds 需要删除的文件管理主键
     * @return 结果
     */
    @Override
    public int deleteFilesManageByFileIds(Long[] fileIds)
    {
        return filesManageMapper.deleteFilesManageByFileIds(fileIds);
    }

    /**
     * 删除文件管理信息
     * 
     * @param fileId 文件管理主键
     * @return 结果
     */
    @Override
    public int deleteFilesManageByFileId(Long fileId)
    {
        return filesManageMapper.deleteFilesManageByFileId(fileId);
    }
}
